(1)建立新專案
命名新專案,並記錄網址
https://github.com/xxxxx/gittest.git
(2)新增資料夾,並移動進去
mkdir '資料夾名稱'
cd '資料夾名稱'
(3)將該資料夾與github專案連結(clone)
git clone https://github.com/xxxxx/gittest.git
目前為空,因為github上沒資料
(4)進入github(gittest)資料夾
cd gittest
(5)加入檔案or編輯檔案
touch > git add . > git commit -m '備註'
(6)第一次推
git remote add '數據庫名稱'
git branch -M 分支名稱
git push -u 數據庫名稱 分支名稱
(7)更新資料(推送數據庫到 Github)
git push
要輸入帳號密碼,確認是本人
建立分支
(8)建立分支
git branch '分支名稱'
https://ithelp.ithome.com.tw/upload/images/20220101/20137684l3oSkR5cHK.png
(9) 瀏覽目前分支
git branch
(10) 移動到該分支
git checkout '分支名稱'
(11) 進入該分支後,才能編輯分支內的資料、並查看更新
git status
(12) add + commit
git add .
git commit -m '備註'
此時瀏覽分支有2,內容不同,push需要指定remote及branch
之所以會這樣的緣故是因有非常多的數據庫(有正式的或是測試用的),
那他第一個預設通常都是 origin 就像 master 一樣
(13) push
查詢有多少個遠端數據庫
git remote
git push '數據庫名稱' '分支名稱'
案例:
沒變更主要branch,變更 更新branch:
主要branch(main)與更新branch(feature1)同時更新,無衝突時:
(a)先把HEAD移動到主要專案上
git checkout 'main(分支名稱)'
(b)接著合併想合併的版本(兩版本皆須已commit完成)
git merge 'feature1(分支名稱)'
(c)此時主要分支就會有全部的資料
案例:
主要branch(main)與更新branch(feature1)同時更新,有衝突時:
(a) 先把HEAD移動到主要專案上
git checkout 'main(分支名稱)'
(b) 接著合併想合併的版本(兩版本皆須已commit完成)
git merge 'feature1(分支名稱)'
(c) 解決上圖問題,無法自動合併故改為 手動合併
(d) add . + commit -m '備註'
(a) 檔案拉下來
git pull
(b) 解決問題,無法自動合併故改為 手動合併
(d) add . + commit -m '備註'
實務上會使用git pull + git merge 先將同事資料拉下來
git push 到 github 會保留本地數據庫commit
(1)尚未push把commit還原(仍保留檔案在工作目錄)
git reset HEAD^
(2)尚未push把commit還原(檔案刪除)
git reset HEAD^ —hard
(3)還原所有,還原工作目錄與索引,會與最後一次commit保持一樣
git reset —hard
(4)尚未commit 索引檔案退到工作目錄
git reset HEAD
使用 rebase 合併
git rebase 'branch名稱'
merge:
分支在同一條線上時,merge會快轉
但分支在不同線上時,不會快轉此時branch(main)內已經包含更新branch(feature1)
但更新branch(feature1)仍為原更新branch(feature1)
(git checkout feature1)
https://backlog.com/git-tutorial/tw/stepup/stepup1_4.html
rebase:雖然但分支在不同線上,但有快轉效果(使分支在同一條線上),並有完整歷史紀錄
git reflog
(1) 遠端版本庫不止一個,這個命令會將它們全部列出來。
git remote -v
git2 https://github.com/xxxxx/tryconnect.git (fetch)
git2 https://github.com/xxxxx/tryconnect.git (push)
git3 https://github.com/xxxxx/text-1.git (fetch)
git3 https://github.com/xxxxx/text-1.git (push)
origin https://github.com/xxxxx/tryconnect.git (fetch)
origin https://github.com/xxxxx/tryconnect.git (push)
(2) 查詢有多少個遠端數據庫
git remote
(3) 推資料進github
a. 將github與本地資料夾連結
git remote add '遠端數據庫名稱' https://github.com/xxxxx/tryconnect.git
b. 新增branch main
git branch -M '分支名稱'
c. 資料推到branch
git push -u '遠端數據庫名稱' '分支名稱'
只挑自己想要的commit合併到其他branch
(1) 到該分支挑選想要的commit
git checkout '分支名稱'
git log
(2) 回主要分支,抓取
git checkout '分支名稱'
git cherry-pick 'log版本號'
ex:還原不小心刪除檔案,救回來
(1) 查詢歷史紀錄
git reflog
(2) 還原commit
git reset '想還原的編號'
(3) 查看commit(此時檔案還沒復原,僅復原commit)
git log
(4) 還原commit + 檔案
git reset '想還原的編號' —hard
情境:資料寫到一半做別的事情,很快就要回來繼續寫
(之前有commit過,但目前無需再更新commit)
(1)暫時儲存當前目錄
git stash
此時 git status 不會有東西(因非commit)
(2)瀏覽 git stash 列表
git stash list
(3)還原暫存
git stash pop
step1.回之前暫存過的分支
step2.還原 暫存檔案(git stash)
(4)清除最新暫存
git stash drop
(5)清除全部暫存
git stash clear
(6)把暫存紀錄帶到其他branch作法:
git stash
git checkout '其他branch名稱'
git stash pop
標籤是用於標記特定的點/提交的歷史
通常會用來標記發布版本的名稱/號碼(如:v1.0)。
(1)新增輕量標籤( 只新增標籤 )
git tag '標籤名稱'
(2)新增標示標籤( 新增標籤 + 標籤詳細資料 )
git tag -am ''詳細資料'' '版本名稱'
(3)查詢標籤
git tag
(4)切換到該標籤的commit
git checkout '版本名稱'
切換回原本的
git checkout '分支名稱'
(5)查詢詳細標籤
git tag -n
(6)刪除標籤
刪除標籤不會影響commit的內容
git tag -d '標籤名稱'
git status用來看有init的資料夾內,檔案情形
(1) modified file
如果更動任何一個project file,那隻檔案的狀態就會變成modified。
(2) Changes to be committed
(將要提交的檔案)
(3) Changes not staged for commit
(被更動但尚未要提交的檔案)
(4) untracked file (未被追蹤檔案)
所有新增出來、還沒用git add的檔案
(5) new file
untracked file被git add之後,狀態就會變成new file,commit之後就變成project file。
再做一個新的 Commit
來取消不要的 Commit
(1) git log 查看欲恢復的commit
(2) git revert ‘版本號’
此時 log 會多一個 commit
(3) git push
推到遠端資料庫
盡量不要一起做多個commit
因revert會恢復到該commit的全部狀態
個別檔案不好追歷史紀錄,會因此遺失
https://www.youtube.com/playlist?list=PLYrA-SsMvTPOZeB6DHvB0ewl3miMf-2tj
git init
git config --global user.email "你的mail"
git config --global user.name "你的名字"
git config --list
mkdir '資料夾名稱'
touch '檔案名稱'
git add .
git commit -m '備註'
檢查
git status
https://github.com/xxxxx/tryconnect.git
*remote非branch名稱
*可在config檔案內看到remote資料
(1)將github與本地資料夾連結
git remote add '遠端數據庫名稱' https://github.com/xxxxx/tryconnect.git
(2) 新增branch main
git branch -M '分支名稱'
(3) 資料推到branch
git push -u '遠端數據庫名稱' '分支名稱'
此時檔案config內會顯示連結的git網址
url = https://github.com/xxxxx/tryconnect.git
git add .
git commit -m '備註'
git push
git push '數據庫名稱remote' '分支名稱branch'
HEAD預設都會指向最新的commit
git log
git checkout '前四碼'
git checkout "master or main...(看要回去哪個分支)“
branch就像是便利貼,會貼在commit位置上
前述6.將github與本地資料夾連結時有建立分支
(1) 開新分支
git branch '分支名稱'
(2) 瀏覽目前分支
git branch
(3) 切換分支
會去到該branch的最新commit處,HEAD也會過去
git checkout '分支名稱'
(4) 合併分支
A.合併分支
僅有更新branch(feature1)時
a. 先把HEAD移動到主要專案上
git checkout 'main(分支名稱)'
b. 接著合併想合併的版本(兩版本皆須已commit完成)
git merge 'feature1(分支名稱)'
c. 此時主要分支就會有全部的資料
B.自動合併
(1)主要branch(main)與更新branch(feature1)同時更新,無衝突時:
(a)先把HEAD移動到主要專案上
git checkout 'main(分支名稱)'
(b)接著合併想合併的版本(兩版本皆須已commit完成)
git merge 'feature1(分支名稱)'
(2)主要branch(main)與更新branch(feature1)同時更新,有衝突時:
同一行不同內容
(a) 先把HEAD移動到主要專案上
git checkout 'main(分支名稱)'
(b) 接著合併想合併的版本(兩版本皆須已commit完成)
git merge 'feature1(分支名稱)'
(c) 解決上圖問題,無法自動合併故改為 手動合併
(d) add . + commit -m '備註'
https://backlog.com/git-tutorial/tw/stepup/stepup1_4.html
reset可以帶著HEAD及branch到別處的commit
(1)把commit還原(仍保留檔案在工作目錄)
git reset HEAD^
(2)把commit還原(檔案刪除)
git reset HEAD^ —hard
(3)還原不小心刪除檔案,救回來
a. 查詢歷史紀錄
git reflog
b. 還原commit
git reflog ’想還原的編號’
c. 查看commit(此時檔案還沒復原,僅復原commit)
git log
d. 還原commit + 檔案
git reflog ’想還原的編號’ —hard
A. 開啟資料夾
open .
B. 偷懶設定縮寫指令
Git 縮寫:
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.st status
git config --global alias.ci commit
C. 觀看所有 config (檔案)的設定:
Mac:~/.gitconfig
Win:C:\Users$USER
D. 尚未add(索引)的檔案,刪除
查看
git clean -n
刪除
git clean -f
E. 索引檔案退到工作目錄
git reset HEAD
F. Github只有一個分支時可直接用git push會推到Github,
若有新增其他分支則使用git push -u ’遠端數據庫名稱’ ‘分支名稱’
G. Github的Source 要對外給人家看的branch
H. 實務上要 推資料 時
1.git checkout 分支
2.git pull 先將同事資料拉下來
3.git merge 或手動修改衝突合併
4.git push 再推上資料
I. 作業時,先將檔案更新至最新(pull)再作業
VScode 安裝 Git Graph 選支線
Master 以及 Develop > 長期分支
主要是用來放穩定、隨時可上線的版本。來源只能從別的分支合併(merge)過來,tag版本。
所有開發的基礎分支,當要新增功能的時候,所有的 Feature 分支都是從這個分支切出去的。而 Feature 分支的功能完成後,也都會合併回來這個分支。
當線上產品發生緊急問題的時候,會從 Master 分支開一個 Hotfix 分支出來進行修復,Hotfix 分支修復完成之後,會合併回 Master 分支,也同時會合併一份到 Develop 分支。
Develop 分支夠成熟了,就可以把 Develop 分支合併到 Release 分支,上線前的最後測試。測試完成後,Release 分支將會同時合併到 Master 以及 Develop 這兩個分支上
新增功能時使用,Feature 分支都是從 Develop 分支來的,完成之後會再併回 Develop 分支。